/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Itens;

import Engine.Fisica.Clip;
import jogopoo.Util.Matematica;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.net.URL;
import jogopoo.Efeitos.Efeito;
import jogopoo.Grafico.GrafCenario;
/**
 *
 * @author user
 */
public class Raio extends Efeito{

      public Raio(GrafCenario cenario,int x, int y){

        super(cenario);
        posicao.x = x;
        posicao.y = y;

        indice = 0;
        incr = 1;
    }
    /**
     * Move o raio e também faz o teste se saiu da tela, se sim ele é removido,
     * também faz os teste de colisão, com os planetas e com a nave
     */
    public void move(){
        posicao.y += 32;
        if(posicao.y > 700){
            cenario.getListaRaios().remove(this);
        }
        for(int i = 0; i < cenario.getListaPlaneta().size();++i){
            boolean dentro = false;
            int j = 0;
             double d = Matematica.distanciaPonto(posicao.x, posicao.y,
                    cenario.getListaPlaneta().get(i).getPosicao().x,
                    cenario.getListaPlaneta().get(i).getPosicao().y);
            double size = cenario.getListaPlaneta().get(i).getListaElipses().size();
             if(size > 0 && d < cenario.getListaPlaneta().get(i).getRaio()){
                 while(j < size && Matematica.distanciaPonto(this.posicao.x,this.posicao.y,
                     (int)cenario.getListaPlaneta().get(i).getListaElipses().get(j).getX()+10,
                     (int)cenario.getListaPlaneta().get(i).getListaElipses().get(j).getY()+10)
                     >= 15){
                     ++j;
                  }
                 if(j != size)
                    dentro = true;
             }
                if(d < cenario.getListaPlaneta().get(i).getRaio() && !dentro)
                {
                   cenario.getListaRaios().remove(this);
                }
        }

        if (this.posicao.y > cenario.getPlayer().getPosicao().y + 32 &&
                this.posicao.x > cenario.getPlayer().getPosicao().x &&
                this.posicao.x < cenario.getPlayer().getPosicao().x + 64) {
            cenario.getPlayer().morre();
            cenario.getListaRaios().remove(this);
        }
    }

/**
 * Carrega as imagens antes que o objeto seja instanciado
 * @param component
 * @throws InterruptedException
 */
    public static void carregarImagens(Component component) throws InterruptedException
    {
        sprite = new Image[2];
        MediaTracker mediaTracker = new MediaTracker(component);

        for(int i = 0; i < 2; ++i)
        {
            String filename = "/imagens/efeitos/raio000"+i+".png";
            URL url = Clip.class.getResource(filename);
            sprite[i] = Toolkit.getDefaultToolkit().getImage(url);
            mediaTracker.addImage(sprite[i], i);
        }

        mediaTracker.waitForAll();
    }

    @Override
    public void desenha(Graphics2D g2) {
                g2.drawImage(sprite[indice],
                posicao.x, posicao.y, cenario);

        indice += incr;

        if (indice == 0 || indice == sprite.length - 1) {
            incr = -incr;
        }
    }

  private int indice;
  private int incr;
  private static Image[] sprite;
}
